package com.nn.controller;

import com.nn.pojo.User;
import com.nn.service.UserService;
import com.nn.vo.PageResult;
import com.nn.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

@RestController
@CrossOrigin
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * url:/user/login
     * 参数:对象的JSON串
     * 返回值:SysResult对象
     * 业务需求:如果用户登陆成功,返回token
     * 如果用户登陆失败,返回null
     */

    @PostMapping("/login")
    public SysResult login(@RequestBody User user) {
        String token = userService.login(user);
        if (StringUtils.hasLength(token)) {//判断token是否有数据,有值返回成功
            return SysResult.success(token);
        }
        return SysResult.fail();
    }

    /**
     * 请求路径: /user/list
     * 请求类型: GET
     * 请求参数: 后台使用PageResult对象接收
     * 请求案例: http://localhost:8091/user/list?query=查询关键字&pageNum=1&pageSize=10
     * 响应参数: SysResult对象 需要携带分页对象 PageResult
     */
    @GetMapping("/list")
    public SysResult getUserlist(PageResult pageResult) {
        pageResult = userService.getUserList(pageResult);
        return SysResult.success(pageResult);
    }

    @PostMapping("/addUser")
    public SysResult addUser(@RequestBody User user) {
        userService.addUser(user);
        return SysResult.success();
    }

    /**
     * 业务需求:根据ID删除用户
     * 请求类型:delete
     * url:/user/{id}
     * 参数:用户id
     * 返回值:SysResult对象
     */
    @DeleteMapping("/{id}")
    public SysResult deleteId(@PathVariable Integer id) {
        userService.deleteId(id);
        return SysResult.success();
    }

    /**
     * 业务需求:根据ID查询数据
     * 请求类型:GET
     * url:/user/{id}
     * 参数:用户id
     * 返回值:SysResult对象
     */
    @GetMapping("/{id}")
    public SysResult getUserById(@PathVariable Integer id) {
        User user = userService.findUserById(id);
        return SysResult.success(user);
    }

    /**
     * 业务需求:根据ID修改用户
     * 请求类型:PUT
     * url:/user/{updateUser}
     * 参数:用户User
     * 返回值:SysResult对象
     */
    @PutMapping("/updateUser")
    public SysResult updateUser(@RequestBody User user) {
        userService.updateUser(user);
        return SysResult.success();
    }
}
